﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Numeric;


namespace TamGiac
{


    enum ViTri { Khong, Thuong, Can, Deu, Vuong, VuongCan }

    public class LopTamGiac
    {

        public static string[] LoaiTamGiac = { "Không phải tam giác", 
                                                 "Tam giác thường",
                                                 "Tam giác cân", 
                                                 "Tam giác đều",
                                                 "Tam giac vuông", 
                                             "Tam giác vuông cân"};
        private Diem a;

        public Diem A
        {
            get { return a; }
            set { a = value; }
        }
        private Diem b;

        public Diem B
        {
            get { return b; }
            set { b = value; }
        }
        private Diem c;

        public Diem C
        {
            get { return c; }
            set { c = value; }
        }

        public LopTamGiac(float ax, float ay, float bx, float by, float cx, float cy)
        {
            Diem d1 = new Diem(ax, ay);
            Diem d2 = new Diem(bx, by);
            Diem d3 = new Diem(cx, cy);
            a = d1;
            b = d2;
            c = d3;
        }

        public float TinhKhoangCach(Diem d1, Diem d2)
        {
            float rt;
            double dx = d1.X - d2.X;
            double dy = d1.Y - d2.Y;

            rt = (float)Math.Round((decimal)Math.Sqrt(dx * dx + dy * dy), 20);
            return rt;
        }
        public void SapXep(ref float ra, ref float rb, ref float rc)
        {
            List<float> lt = new List<float>();
            lt.Add(ra);
            lt.Add(rb);
            lt.Add(rc);
            for (int i = 0; i < 2; i++)
                for (int j = 1; j < 3; j++)
                    if (lt[j] > lt[i])
                    {
                        float t = lt[j];
                        lt[j] = lt[i];
                        lt[i] = t;
                    }
            ra = lt[0];
            rb = lt[1];
            rc = lt[2];


        }
        public bool KiemTraTamGiac()
        {
            bool rt = true;


            float kab = TinhKhoangCach(a, b);
            float kac = TinhKhoangCach(a, c);
            float kbc = TinhKhoangCach(b, c);
            SapXep(ref kab, ref  kac, ref  kbc);
            if (kab >= kac + kbc)
                rt = false;
            return rt;
        }

        public byte XacDinhLoaiTamGiac()
        {
            byte rt = 99;
            if (!KiemTraTamGiac())
                return (byte)ViTri.Khong;

            float kab = TinhKhoangCach(a, b);
            float kac = TinhKhoangCach(a, c);
            float kbc = TinhKhoangCach(b, c);
            SapXep(ref kab, ref  kac, ref  kbc);

            if (kab == kac)
                if (kab == kbc)
                    rt = (byte)ViTri.Deu;
                else
                    rt = (byte)ViTri.Can;
            else if (kac == kbc)
                rt = (byte)ViTri.Can;
            else
                rt = (byte)ViTri.Thuong;

            float temp = (kab * kab) - (kac * kac + kbc * kbc);
            if ((temp > -0.000001f) && (0.000001f > temp))
                if (rt == (byte)ViTri.Can)
                    rt = (byte)ViTri.VuongCan;
                else
                    rt = (byte)ViTri.Vuong;


            return rt;
        }
    }
}
